package com.yangfan.thread.thread_wangwenjun08;

/**
 * 执行异步任务  任务处理的 细节 类
 * @param <T>
 */
public class AsynFuture<T> implements Future<T> {

    //判断任务是否完成
    private volatile boolean done = false;

    //结果  例如制作完的蛋糕
    private T result;

    //任务完成通知  例如 蛋糕制作完成后，蛋糕师调用的方法
    public void done(T result) {
        synchronized (this) {
            this.result = result;
            this.done = true;
            this.notifyAll();
        }
    }

    //获取结果
    @Override
    public T get() throws InterruptedException {
        synchronized (this) {
            while (!done) {
                this.wait();//如果 没有做完则等待
            }
        }
        return result;//做完以后则返回
    }
}
